package com.zlm.Map.HashMap;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * @author 13026
 */
public class HashMap_demo {
    /*
     * HashMap
     * 无序、不重复、无索引
     * 底层是哈希表结构
     * 依赖hashCode方法和equals保证键的唯一
     * 如果键存储的是自定义对象，需要重写hashCode和equals方法
     * 如果值存储的是自定义对象，不需要重写hashCode和equals方法
     * */
    public static void main(String[] args) {
        // 1.创建一个普通Map集合
        HashMap<Integer, Integer> objectObjectHashMap = new HashMap<>();
        objectObjectHashMap.put(1, 1);
        objectObjectHashMap.put(2, 2);
        objectObjectHashMap.put(3, 3);
        objectObjectHashMap.put(4, 4);
        objectObjectHashMap.put(5, 5);

        System.out.println(objectObjectHashMap);

        // 2.利用上面数据获取一个不可变集合

        // 获取到所有键值对对象（Entry对象）
        Set<Map.Entry<Integer, Integer>> entries = objectObjectHashMap.entrySet();
        System.out.println(entries);

        // 把entries变成一个数组
        // Map.Entry[] entryList =  new Map.Entry[0] 确保数组元素是Entry对象
        // 相当于提供一个长度为0的数组，entries的所有元素放到该数组中
        Map.Entry[] array1 = entries.toArray(new Map.Entry[0]);
        for (Map.Entry entry : array1) {
            System.out.println(entry);
        }

        // 得到一个不可变的Map集合
        Map<Object, Object> objectObjectMap = Map.ofEntries();

        // JDK10版本：上面太长了，下面使用copyOf直接得到不可变集合
        Map<Integer, Integer> integerIntegerMap = Map.copyOf(objectObjectHashMap);

    }
}

